package exception;

/**
 * java异常处理机制
 * java将异常进行类分类:
 * java.lang.Throwable是所有异常的顶级超类
 * 下面派生了两个子类型:
 * Error:这类错误表示系统级别错误，是不可恢复的错误，程序出现后就会停止。
 *       java异常处理机制不处理Error。
 * Exception:程序级别的异常("意外，例外")，是可以通过异常处理机制恢复的错误。
 *
 * java异常处理机制中的:
 * try{
 *    代码片段
 * }catch(XXXException e){
 *    当try语句块中出现XXXException的补救措施
 * }
 */
public class TryCatchDemo {
    public static void main(String[] args) {
        System.out.println("程序开始了...");
        try {
//            String line = null;
//            String line = "";
            String line = "abc";
            //出现空指针，如果没有异常处理机制就会意外中止(程序到这里就结束了)
            System.out.println(line.length());
            System.out.println(line.charAt(0));
            System.out.println(Integer.parseInt(line));
            //try语句块中如果出现了异常，那么出错代码以下的内容都不执行
            System.out.println("!!!!!!!!!!!!!");
            //try语句块不出现异常时，catch块不执行
//        }catch(NullPointerException e){
//            //针对try中出现空指针后的解决办法
//            System.out.println("出现了空指针并解决了");
//        //针对try中出现的不同异常有不同处理方式时，可以分别catch
//        }catch(StringIndexOutOfBoundsException e){
//            System.out.println("出现了下标越界，并解决了");
//        }

        //当多个异常具有相同处理方式时，可以合并到一个catch进行处理
        }catch(NullPointerException|StringIndexOutOfBoundsException e){
            System.out.println("出现空指针或下标越界，并解决了");
        //可以在最后捕获超类型异常，凡是该异常的子类型都可以被其捕获并处理
        }catch(Exception e){
            System.out.println("反正就是出了个错");
        }

        System.out.println("程序结束了!");
    }
}





